package com.xinchao.service;

import com.xinchao.core.exception.ServiceException;
import com.xinchao.model.DeviceSimInfo;
import com.xinchao.model.User;
import com.xinchao.model.dto.DeviceSimInfoActivationTimeDTO;
import com.xinchao.model.dto.DeviceSimInfoTrafficDTO;
import com.xinchao.model.vo.DeviceSimInfoVO;

import java.util.List;

/**
 * 终端sim卡信息Service
 * @author dxy
 * @date 2018/8/15 10:39
 */
public interface DeviceSimInfoService {
	/**
	 * 保存终端sim卡信息
	 * @param deviceSimInfo DeviceSimInfo
	 */
	void saveDeviceSimInfo(DeviceSimInfo deviceSimInfo);

	/**
	 * 修改终端sim卡信息
	 * @param deviceSimInfo DeviceSimInfo
	 */
	void updateDeviceSimInfo(DeviceSimInfo deviceSimInfo);

	/**
	 * 根据终端唯一设备号查询sim卡信息
	 *
	 * @param deviceCode 终端唯一设备号
	 * @return DeviceSimInfoVO
	 */
	DeviceSimInfoVO selectByDeviceCode(String deviceCode);

	/**
	 * 获取终端sim卡信息总数
	 * @param city 城市
	 * @return Long
	 * @throws ServiceException
	 */
	Long countDeviceSimInfo(String city) throws ServiceException;

	/**
	 * 获取第一个终端sim卡信息流量（升序排列）
	 * @param city 城市
	 * @return DeviceSimInfoTrafficDTO
	 * @throws ServiceException
	 */
	DeviceSimInfoTrafficDTO selectFirstDeviceSimInfoTraffic(String city) throws ServiceException;

	/**
	 * 获取终端流量信息列表
	 * @param city 城市
	 * @param startId 起始ID
	 * @param endId 结束ID
	 * @param rows 条数
	 * @return List<DeviceSimInfoTrafficDTO>
	 * @throws ServiceException
	 */
	List<DeviceSimInfoTrafficDTO> listDeviceSimInfoTraffic(String city, Long startId, Long endId, Long rows) throws ServiceException;


	/**
	 * 更新终端sim卡信息当月流量
	 * @throws ServiceException
	 */
	void updateDeviceSimInfoMonthTraffic(DeviceSimInfoTrafficDTO dto) throws ServiceException;
	/**
	 * 获取没有激活时间的终端sim卡信息总数
	 * @param city 城市
	 * @return Long
	 */
	Long countDeviceSimInfoNoActivationTime(String city);

	/**
	 * 获取第一个终端sim卡信息激活时间（升序排列）
	 * @param city 城市
	 * @return DeviceSimInfoActivationTimeDTO
	 * @throws ServiceException
	 */
	DeviceSimInfoActivationTimeDTO selectFirstDeviceSimInfoActivationTime(String city) throws ServiceException;

	/**
	 * 获取终端信息激活时间列表
	 * @param startRow 开始行
	 * @param endRow 结束行
	 * @return List<DeviceSimInfoTrafficDTO>
	 * @throws ServiceException
	 */
	List<DeviceSimInfoActivationTimeDTO> listDeviceSimInfoActivationTime(String city, Long startRow, Long endRow) throws ServiceException;

	/**
	 * 更新终端sim卡信息激活时间
	 * @throws ServiceException
	 */
	void updateDeviceSimInfoActivationTime(DeviceSimInfoActivationTimeDTO dto) throws ServiceException;

	/**
	 * 设置SIM卡状态(0:启用 1:关停)
	 * hanqr 2018-08-16
	 * @param deviceCodes 终端唯一编码
	 * @param simStatus SIM卡状态(0:启用 1:关停)
	 * @param loginUser 当前登录用户
	 * @param ip 操作ip
	 */
	void setSimStatus(String deviceCodes, Integer simStatus, User loginUser, String ip) throws ServiceException;

	/**
	 * 更新终端sim卡信息历史总流量（移动只能获取6个月的数据）
	 * @throws ServiceException
	 */
	void updateDeviceSimInfoHistoryTraffic(DeviceSimInfoTrafficDTO dto) throws ServiceException;
}
